package com.zzz.friend.service.user;

import com.zzz.common.core.enums.ResultCode;
import com.zzz.friend.domain.user.dto.UseEmailLoginDTO;
import com.zzz.friend.domain.user.dto.UsePasswordDTO;
import com.zzz.friend.domain.user.dto.UserDTO;
import com.zzz.friend.domain.user.dto.UserUpdateDTO;
import com.zzz.friend.domain.user.vo.UserLoginVO;
import com.zzz.friend.domain.user.vo.UserVO;

/**
 * @BelongsProject: oj-project
 * @BelongsPackage: com.zzz.friend.service
 * @Author: zhai
 * @CreateTime: 2025-10-25  16:07
 * @Description: TODO
 * @Version: 1.0
 */
public interface UserService {
    /**
     * @description: 发送邮箱验证码
     * @author: zhai
     * @date: 2025/10/26 15:56
     * @param: [registerDTO]
     * @return: int
     **/
    boolean sendEmailCode(UseEmailLoginDTO registerDTO);
    /**
     * @description: 发送手机验证码
     * @author: zhai
     * @date: 2025/10/26 15:55
     * @param: [userDTO]
     * @return: int
     **/
//    boolean sendPhoneCode(UserDTO userDTO);
    /**
     * @description: 使用手机验证码登录
     * @author: zhai
     * @date: 2025/10/27 12:54
     * @param: [userDTO]
     * @return: com.zzz.common.core.enums.ResultCode
     **/
//    String usePhoneCodeLogin(String phone, String code);
    /**
     * @description: 使用邮箱验证码登录
     * @author: zhai
     * @date: 2025/10/27 12:54
     * @param: [emailLoginDTO]
     * @return: com.zzz.common.core.enums.ResultCode
     **/
    String useEmailCodeLogin(UseEmailLoginDTO emailLoginDTO);
    /**
     * @description: 使用邮箱和密码登录
     * @author: zhai
     * @date: 2025/10/27 12:54
     * @param: [passwordDTO]
     * @return: com.zzz.common.core.enums.ResultCode
     **/
    String usePasswordDTO(UsePasswordDTO passwordDTO);
    /**
     * @description: 获取用户信息
     * @author: zhai
     * @date: 2025/10/30 20:53
     * @param: [token]
     * @return: com.zzz.friend.domain.user.vo.UserVO
     **/
    UserLoginVO info(String token);
    /**
     * @description: 登出
     * @author: zhai
     * @date: 2025/10/30 20:58
     * @param: [token]
     * @return: int
     **/
    Boolean logout(String token);
    /**
     * @description:  获取个人信息
     * @author: zhai
     * @date: 2025/10/30 20:58
     * @param: []
     * @return: com.zzz.friend.domain.user.vo.UserVO
     **/
    UserVO detail();
    /**
     * @description: 修改用户信息
     * @author: zhai
     * @date: 2025/10/30 21:00
     * @param: [userUpdateDTO]
     * @return: int
     **/
    Boolean editUserInfo(UserUpdateDTO userUpdateDTO);
    /**
     * @description: 修改用户头像
     * @author: zhai
     * @date: 2025/10/30 21:00
     * @param: [headImage]
     * @return: int
     **/
    Boolean updateHeadImage(String headImage);
}
